package com.rc.web.listener;

import cn.dev33.satoken.stp.StpUtil;
import com.mybatisflex.annotation.InsertListener;
import com.rc.common.model.BaseConEntity;
import com.rc.common.model.BaseImgEntity;
import com.rc.common.model.BaseUserEntity;

import java.util.List;

/**
 * 公共字段填充
 * 实现InsertListener接口，用于在数据插入时自动填充公共字段
 */
public class BaseInsertListener implements InsertListener {
    
    /**
     * 插入数据时的回调方法
     * @param o 要插入的实体对象
     */
    @Override
    public void onInsert(Object o) {
        // 获取当前登录用户的ID
        long loginIdAsLong = StpUtil.getLoginIdAsLong();
        
        // 如果对象是BaseUserEntity类型
        if (o instanceof BaseUserEntity baseUserEntity){
            // 设置更新用户和创建用户为当前登录用户
            baseUserEntity.setUpdateUser(loginIdAsLong);
            baseUserEntity.setCreateUser(loginIdAsLong);
            return;
        }

        // 如果对象是BaseConEntity类型
        if (o instanceof BaseConEntity baseConEntity){
            // 设置关联用户ID为当前登录用户
            baseConEntity.setConId(loginIdAsLong);
            return;
        }

        // 如果对象是BaseImgEntity类型且图片列表为空
        if (o instanceof BaseImgEntity imgEntity && imgEntity.getImgs() == null){
            // 初始化图片列表为空列表
            imgEntity.setImgs(List.of());
        }
    }
}
